win32: Get rid of XP theme
authorBenjamin Otte <otte@redhat.com>
Thu, 4 Feb 2016 13:25:46 +0000 (14:25 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 4 Feb 2016 13:25:46 +0000 (14:25 +0100)
XP is not supported anymore. And we can massively simplify the win32
theme if we don't have to support 2 versions.

gtk/Makefile.am
gtk/theme/win32/gtk-win32-xp.css [deleted file]
gtk/theme/win32/gtk-win32.css [deleted file]
gtk/theme/win32/gtk.css [new file with mode: 0644]

index bd3108e0ab71978d5ead2612c6f2a9f6efc599c4..5afd1a101ba6863b3f12a82f8d90b3171eeb51c9 100644 (file)
@@ -1232,9 +1232,8 @@ gtk.gresource.xml: Makefile.am inspector/Makefile.inc
        echo "    <file>theme/HighContrast/gtk-contained.css</file>" >> $@; \
        echo "    <file>theme/HighContrast/gtk-contained-inverse.css</file>" >> $@; \
        if test "$(win32_theme)" = "yes"; then \
-         echo "    <file alias='theme/win32/gtk-base.css'>theme/win32/gtk-win32-base.css</file>" >> $@; \
-         echo "    <file alias='theme/win32/gtk.css'>theme/win32/gtk-win32.css</file>" >> $@; \
-         echo "    <file alias='theme/win32-xp/gtk.css'>theme/win32/gtk-win32-xp.css</file>" >> $@; \
+         echo "    <file>theme/win32/gtk-win32-base.css</file>" >> $@; \
+         echo "    <file>theme/win32/gtk.css</file>" >> $@; \
        fi; \
        for f in $(srcdir)/cursor/*.png; do \
          n=`basename $$f`; \
@@ -1276,7 +1275,6 @@ gesture_sources =                                 \
 theme_sources =                                \
        theme/win32/gtk-win32.css               \
        theme/win32/gtk-win32-base.css          \
-       theme/win32/gtk-win32-xp.css            \
        theme/Adwaita/assets.txt                \
        theme/Adwaita/assets.svg                \
        theme/Adwaita/_colors-public.scss       \
diff --git a/gtk/theme/win32/gtk-win32-xp.css b/gtk/theme/win32/gtk-win32-xp.css
deleted file mode 100644 (file)
index 68ccba5..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-@import url("gtk-win32-base.css");
-
-/* Override non-entry combobox arrow parts from the base theme,
-   since XP draws an empty white rectangle for parts 6 1 and 6 4.
-   Draw parts 1 1 and 1 4 instead */
-GtkComboBox GtkBox {
-    background-image: -gtk-win32-theme-part(combobox, 1 1, margins (1 0 1 0));
-}
-GtkComboBox GtkBox:insensitive {
-    background-image: -gtk-win32-theme-part(combobox, 1 4, margins (1 0 1 0));
-}
-
-.menubar {
-    background-color: #f7f7f7;
-    /*background-color: -gtk-win32-color(button, 30);*/
-
-    border-width: 0 0 1px 0;
-    border-style: solid;
-    border-color: #ded3bd;
-}
-
-.menu > .menuitem:prelight {
-    background-color: -gtk-win32-color(button, 29);
-}
-
-.menubar > .menuitem:prelight,
-.menubar > .menuitem:prelight:focused {
-    background-image: -gtk-win32-theme-part(toolbar, 1 2);
-}
-
-.notebook {
-    background-image: -gtk-win32-theme-part(tab, 9 1, margins(-1 -3 -3 -1));
-    border-image: -gtk-win32-theme-part(tab, 9 1, margins(0 -2 -2 0)) 1 1 1 1 repeat;
-}
-
-.menuitem.check,
-.menuitem.check:prelight,
-.menuitem.check:insensitive,
-.menuitem.check:active,
-.menuitem.check:active:prelight,
-.menuitem.check:inconsistent,
-.menuitem.check:inconsistent:insensitive,
-.menuitem.check:inconsistent:prelight,
-.menuitem.check:inconsistent:active,
-.menuitem.check:inconsistent:active:prelight,
-.menuitem.check:insensitive:active,
-.menuitem.check:insensitive:active:prelight {
-    background-image: none;
-    border-width: 0;
-}
-
-.menuitem.radio,
-.menuitem.radio:prelight,
-.menuitem.radio:insensitive,
-.menuitem.radio:active,
-.menuitem.radio:active:prelight,
-.menuitem.radio:inconsistent,
-.menuitem.radio:inconsistent:insensitive,
-.menuitem.radio:inconsistent:prelight,
-.menuitem.radio:inconsistent:active,
-.menuitem.radio:inconsistent:active:prelight,
-.menuitem.radio:insensitive:active,
-.menuitem.radio:insensitive:active:prelight {
-    background-image: none;
-    border-width: 0;
-}
-
-.spinbutton .button {
-    border-width: 1px;
-    border-style: solid;
-    border-color: #7b9ebd;
-}
-
-.spinbutton .button:last-child {
-    border-width: 1px 1px 1px 0px;
-}
-
-GtkProgressBar.progressbar {
-    border-width: 2px;
-    border-style: solid;
-    border-color: transparent;
-}
-
-/* Notebook */
-
-.notebook {
-    background-color: #ffffff;
-    border-width: 1px 1px 1px 1px;
-    border-style: solid;
-    background-origin: padding-box;
-    background-clip: border-box;
-    background-image: -gtk-win32-theme-part(tab, 9 1, margins(-1 -3 -2 -1));
-    border-image: -gtk-win32-theme-part(tab, 9 1, margins(0 -2 -1 0)) 1 1 1 1 repeat;
-    -GtkNotebook-tab-overlap: 1;
-    -GtkNotebook-tab-curvature: 0;
-}
-
-.notebook tab {
-    border-width: 0;
-    background-image: -gtk-win32-theme-part(tab, 1 1);
-    padding: 0px 4px 0px 4px;
-}
-
-.notebook tab.left, .notebook tab.right {
-    padding: 4px 0px 4px 0px;
-}
-
-.notebook tab:active {
-    background-image: -gtk-win32-theme-part(tab, 1 3, margins(0 0 -1 0));
-}
-.notebook tab:active.top {
-    padding: 2px 4px 1px 4px;
-}
-
-.notebook tab:active.bottom {
-    padding: 1px 4px 2px 4px;
-}
-
-.notebook tab:active.right {
-    padding: 4px 4px 4px 1px;
-}
-
-.notebook tab:active.left {
-    padding: 4px 1px 4px 4px;
-}
-
-/* Listbox */
-
-/* This is roughly similar to what Vista+ theme draws. The reason for using
-this instead of changing background-color to @selection_bg_color is that
-blanket "* { color: @text_color; }" style overrides ".list-row:selected {
-color: @selected_fg_color; }", causing labels and widgets in list rows to have
-black (not white) text over blue background. Fixing that requires overhauling
-the whole theme to put narrow "color: @text_color" style everywhere, to be
-able to remove the blanket style.
-And the reason for not using appropriate W32 theme part is that the appropriate
-W32 theme part does not exist in XP theme. */
-.list-row:prelight {
-    background-image: -gtk-gradient (linear,
-               0 0, 0 1,
-               color-stop(0, rgb(253, 254, 255)),
-               color-stop(1, rgb(237, 245, 255)));
-    box-shadow: inset -1px -1px 0px rgba (128, 128, 255, 0.5), inset 1px 1px 0px rgba (128, 128, 255, 0.5);
-}
-
-.list-row:selected {
-  /* Override *:selected {} blanket style, keeping the background - bright
-     and the text - dark */
-    background-color: transparent;
-    color: @text_color;
-    background-image: -gtk-gradient (linear,
-               0 0, 0 1,
-               color-stop(0, rgb(236, 244, 255)),
-               color-stop(1, rgb(208, 230, 255)));
-    box-shadow: inset -1px -1px 0px rgba (128, 128, 255, 0.5), inset 1px 1px 0px rgba (128, 128, 255, 0.5);
-}
-
-.list-row:selected:prelight {
-    background-image: -gtk-gradient (linear,
-               0 0, 0 1,
-               color-stop(0, rgb(221, 236, 255)),
-               color-stop(1, rgb(194, 220, 255)));
-    box-shadow: inset -1px -1px 0px rgba (128, 128, 255, 0.5), inset 1px 1px 0px rgba (128, 128, 255, 0.5);
-}
\ No newline at end of file
diff --git a/gtk/theme/win32/gtk-win32.css b/gtk/theme/win32/gtk-win32.css
deleted file mode 100644 (file)
index f0fd0b6..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-@import url("gtk-win32-base.css");
-
-/* Menus */
-
-.menubar {
-    background-color: transparent;
-    border-width: 0;
-    background-image: -gtk-win32-theme-part(menu, 7 1);
-}
-
-.menubar > .menuitem {
-    background-color: transparent;
-    border-width: 0;
-    background-image: -gtk-win32-theme-part(menu, 8 1);
-}
-
-.menubar > .menuitem:prelight {
-    background-image: -gtk-win32-theme-part(menu, 8 3);
-}
-
-.menuitem:prelight {
-    background-image: -gtk-win32-theme-part(menu, 14 2);
-}
-
-.menuitem:prelight:insensitive {
-    background-image: -gtk-win32-theme-part(menu, 14 4);
-}
-
-.menuitem.radio,
-.menuitem.radio:prelight,
-.menuitem.radio:insensitive {
-    background-color: transparent;
-    background-image: none;
-    border-width: 0;
-}
-
-.menuitem.radio:active, 
-.menuitem.radio:active:prelight {
-    background-image: -gtk-win32-theme-part(menu, 11 3);
-    border-width: 0;
-}
-
-.menuitem.radio:inconsistent,
-.menuitem.radio:inconsistent:insensitive,
-.menuitem.radio:inconsistent:prelight,
-.menuitem.radio:inconsistent:active,
-.menuitem.radio:inconsistent:active:prelight {
-    background-image: none; /* Fall back to default, this state is not in win32 */
-    border-width: 0;
-}
-
-.menuitem.radio:insensitive:active,
-.menuitem.radio:insensitive:active:prelight {
-    background-image: -gtk-win32-theme-part(menu, 11 4);
-    border-width: 0;
-}
-
-.menuitem.check,
-.menuitem.check:prelight,
-.menuitem.check:insensitive {
-    background-image: none;
-    border-width: 0;
-}
-
-.menuitem.check:active, 
-.menuitem.check:active:prelight {
-    background-image: -gtk-win32-theme-part(menu, 11 1);
-    border-width: 0;
-}
-
-.menuitem.check:inconsistent,
-.menuitem.check:inconsistent:insensitive,
-.menuitem.check:inconsistent:prelight,
-.menuitem.check:inconsistent:active,
-.menuitem.check:inconsistent:active:prelight {
-    background-image: none; /* Fall back to default, this state is not in win32 */
-    border-width: 0;
-}
-
-.menuitem.check:insensitive:active,
-.menuitem.check:insensitive:active:prelight{
-    background-image: -gtk-win32-theme-part(menu, 11 2);
-    border-width: 0;
-}
-
-/* Notebook */
-.notebook {
-    /* This prevents a thin half-transparent line between the pane and the tab */
-    background-color: -gtk-win32-color(tab, 5);
-
-    border-width: 1px 1px 1px 1px;
-    border-style: solid;
-    background-origin: padding-box;
-    background-clip: border-box;
-
-    /* W32 theme draws it with borders and all, cut them away */
-    background-image: -gtk-win32-theme-part(tab, 9 1, margins(-1 -3 -2 -1));
-
-    /* Grab the borders now and duplicate them across the perimeter */
-    border-image: -gtk-win32-theme-part(tab, 9 1, margins(0 -2 -1 0)) 1 1 1 1 repeat;
-    /* MSW7 themes draw tab overlaps differently. Net result is:
-       * inactive tab text never moves no matter which tabs get to be active
-       * active tab text moves only up
-       * active tab steals space from its neighbors (overlapping their borders without moving them)
-       * inactive tab does not steal any space from its neighbors (prelight makes that obvious - one tab's borders light up, its neighbors' don't change)
-       * first(last in RTL?) tab has extra gap that disappears (due to overlapping) when this tab activates
-       This can't be emulated in GTK, so we won't even try.
-    */
-    -GtkNotebook-tab-overlap: 0;
-    -GtkNotebook-tab-curvature: 0;
-}
-
-.notebook tab {
-    /* Make sure parts not covered by the background are transparent */
-    background-color: transparent;
-
-    /* Use GTK border, since we can control where it's drawn (unlike built-in theme border, which is always left-top-right) */
-    border-width: 1px;
-    border-style: solid;
-    border-color: rgb(137, 140, 149);
-
-    /* Sadly, GTK CSS can't rotate images, which means that we can't use tabs from the theme */
-    background-image: none;
-    /* Don't use border image either, since it has no bottom border */
-    border-image: none;
-
-    /* By default tabs are large enough for their labels, give them more space */
-    padding: 2px;
-}
-
-/* W32 has no concept of notebook header (the rectangle where tabs are - including the area where tabs could be, if you add more of them), make it disappear */
-.notebook.header {
-  background-color: transparent;
-  background-image: none;
-  border-width: 0px;
-  border-color: transparent;
-}
-
-/* Draw everything ourselves. Default MSW7 theme for a top tab (the only kind of tab available) is:
- 1-px grey border
- extra 1-px inside white borders to the left and the right
- top 8 pixels of the tab are light grey gradient (from 95% to 92% here)
- rest of the tab is dark grey gradient (quick 3-pixel fall from 87% to 85%, then uniform until half the way, then drops to 84%, last 4 pixels fall down to 81%)
-
- Prelight tab is the same as normal, but with light blue instead of grey.
- Active tabs (prelight ot not) are simple white.
- Disabled tabs are simple dark grey.
- There's also theme part for "focused" tab (simple pale blue), but it is unclear in which circumstances it's used.
-
- Normal and selected tab borders are grey.
- Prelight tab borders are blue.
- Disabled tab borders are darker grey.
- */
-.notebook tab.top {
-    background-image: -gtk-gradient (linear,
-               0 0, 0 1,
-               color-stop(0, rgb(242, 242, 242)),
-               color-stop(0.2, rgb(235, 235, 235)),
-               color-stop(0.21, rgb(221, 221, 221)),
-               color-stop(0.22, rgb(216, 216, 216)),
-               color-stop(0.6, rgb(214, 214, 214)),
-               color-stop(0.9, rgb(214, 214, 214)),
-               color-stop(1, rgb(207, 207, 207)));
-    box-shadow: inset -1px 0px 0px white, inset 1px 0px 0px white;
-    /* Tab border is 1px (see above), override bottom border (for top tabs) to be 0px */
-    border-bottom: 0px;
-}
-
-.notebook tab.top:prelight {
-    background-image: -gtk-gradient (linear,
-               0 0, 0 1,
-               color-stop(0, rgb(234, 246, 253)),
-               color-stop(0.2, rgb(217, 240, 252)),
-               color-stop(0.21, rgb(190, 230, 253)),
-               color-stop(0.22, rgb(181, 226, 250)),
-               color-stop(0.6, rgb(178, 224, 249)),
-               color-stop(0.9, rgb(175, 222, 248)),
-               color-stop(1, rgb(167, 217, 245)));
-}
-
-.notebook tab.left {
-    background-image: -gtk-gradient (linear,
-               0 0, 1 0,
-               color-stop(0, rgb(242, 242, 242)),
-               color-stop(0.2, rgb(235, 235, 235)),
-               color-stop(0.21, rgb(221, 221, 221)),
-               color-stop(0.22, rgb(216, 216, 216)),
-               color-stop(0.6, rgb(214, 214, 214)),
-               color-stop(0.9, rgb(214, 214, 214)),
-               color-stop(1, rgb(207, 207, 207)));
-
-    box-shadow: inset 0px -1px 0px white, inset 0px 1px 0px white;
-    /* Tab border is 1px (see above), override right border (for left tabs) to be 0px */
-    border-right: 0px;
-}
-
-.notebook tab.left:prelight {
-    background-image: -gtk-gradient (linear,
-               0 0, 1 0,
-               color-stop(0, rgb(234, 246, 253)),
-               color-stop(0.2, rgb(217, 240, 252)),
-               color-stop(0.21, rgb(190, 230, 253)),
-               color-stop(0.22, rgb(181, 226, 250)),
-               color-stop(0.6, rgb(178, 224, 249)),
-               color-stop(0.9, rgb(175, 222, 248)),
-               color-stop(1, rgb(167, 217, 245)));
-}
-
-.notebook tab.right {
-    background-image: -gtk-gradient (linear,
-               1 0, 0 0,
-               color-stop(0, rgb(242, 242, 242)),
-               color-stop(0.2, rgb(235, 235, 235)),
-               color-stop(0.21, rgb(221, 221, 221)),
-               color-stop(0.22, rgb(216, 216, 216)),
-               color-stop(0.6, rgb(214, 214, 214)),
-               color-stop(0.9, rgb(214, 214, 214)),
-               color-stop(1, rgb(207, 207, 207)));
-
-    box-shadow: inset 0px 1px 0px white, inset 0px -1px 0px white;
-    /* Tab border is 1px (see above), override left border (for right tabs) to be 0px */
-    border-left: 0px;
-}
-
-.notebook tab.right:prelight {
-    background-image: -gtk-gradient (linear,
-               1 0, 0 0,
-               color-stop(0, rgb(234, 246, 253)),
-               color-stop(0.2, rgb(217, 240, 252)),
-               color-stop(0.21, rgb(190, 230, 253)),
-               color-stop(0.22, rgb(181, 226, 250)),
-               color-stop(0.6, rgb(178, 224, 249)),
-               color-stop(0.9, rgb(175, 222, 248)),
-               color-stop(1, rgb(167, 217, 245)));
-}
-
-.notebook tab.bottom {
-    background-image: -gtk-gradient (linear,
-               0 1, 0 0,
-               color-stop(0, rgb(242, 242, 242)),
-               color-stop(0.2, rgb(235, 235, 235)),
-               color-stop(0.21, rgb(221, 221, 221)),
-               color-stop(0.22, rgb(216, 216, 216)),
-               color-stop(0.6, rgb(214, 214, 214)),
-               color-stop(0.9, rgb(214, 214, 214)),
-               color-stop(1, rgb(207, 207, 207)));
-    box-shadow: inset -1px 0px 0px white, inset 1px 0px 0px white;
-    /* Tab border is 1px (see above), override top border (for bottom tabs) to be 0px */
-    border-top: 0px;
-}
-
-.notebook tab.bottom:prelight {
-    background-image: -gtk-gradient (linear,
-               0 1, 0 0,
-               color-stop(0, rgb(234, 246, 253)),
-               color-stop(0.2, rgb(217, 240, 252)),
-               color-stop(0.21, rgb(190, 230, 253)),
-               color-stop(0.22, rgb(181, 226, 250)),
-               color-stop(0.6, rgb(178, 224, 249)),
-               color-stop(0.9, rgb(175, 222, 248)),
-               color-stop(1, rgb(167, 217, 245)));
-}
-
-.notebook tab:active,
-.notebook tab:active:prelight,
-.notebook tab.right:active,
-.notebook tab.right:active:prelight,
-.notebook tab.bottom:active,
-.notebook tab.bottom:active:prelight,
-.notebook tab.left:active,
-.notebook tab.left:active:prelight
-{
-    /* active tabs are pure white with grey borders, and prelight changes nothing */
-    background-image: none;
-    background-color: white;
-    border-color: rgb(137, 140, 149);
-}
-
-.notebook tab:insensitive,
-.notebook tab:insensitive,
-.notebook tab.right:insensitive,
-.notebook tab.bottom:insensitive,
-.notebook tab.left:insensitive
-{
-    /* insensitive tabs are dark grey white with even darker grey borders */
-    background-image: none;
-    background-color: rgb(201, 202, 203);
-    border-color: rgb(128, 128, 128);
-}
-
-.notebook tab:prelight,
-.notebook tab.right:prelight,
-.notebook tab.bottom:prelight,
-.notebook tab.left:prelight
-{
-    /* prelight tabs have blue borders */
-    border-color: rgb(60, 127, 177);
-}
-
-
-.notebook tab.top:active {
-    /* Make active tab "stick out" up by padding it more at the bottom */
-    padding-bottom: 4px;
-}
-
-.notebook tab.right:active {
-    /* Make active tab "stick out" right by padding it more at the left */
-    padding-left: 4px;
-}
-
-.notebook tab.bottom:active {
-    /* Make active tab "stick out" down by padding it more at the top */
-    padding-top: 4px;
-}
-
-.notebook tab.left:active {
-    /* Make active tab "stick out" left by padding it more at the right */
-    padding-right: 4px;
-}
-
-
-/* Listbox */
-
-/* We're cheating here, using part 6 (listview header group),
-   because part 1 (listview item) is empty for some reason */
-.list-row:prelight {
-  background-image: -gtk-win32-theme-part(listview, 6 10);
-}
-
-.list-row:selected {
-  background-color: transparent;
-  /* Override *:selected {} blanket style, keeping the background - bright
-     and the text - dark */
-  color: @text_color;
-  background-image: -gtk-win32-theme-part(listview, 6 13);
-}
-
-.list-row:selected:focus {
-  background-image: -gtk-win32-theme-part(listview, 6 11);
-}
-
-.list-row:selected:prelight {
-  background-image: -gtk-win32-theme-part(listview, 6 12);
-}
diff --git a/gtk/theme/win32/gtk.css b/gtk/theme/win32/gtk.css
new file mode 100644 (file)
index 0000000..f0fd0b6
--- /dev/null
@@ -0,0 +1,344 @@
+@import url("gtk-win32-base.css");
+
+/* Menus */
+
+.menubar {
+    background-color: transparent;
+    border-width: 0;
+    background-image: -gtk-win32-theme-part(menu, 7 1);
+}
+
+.menubar > .menuitem {
+    background-color: transparent;
+    border-width: 0;
+    background-image: -gtk-win32-theme-part(menu, 8 1);
+}
+
+.menubar > .menuitem:prelight {
+    background-image: -gtk-win32-theme-part(menu, 8 3);
+}
+
+.menuitem:prelight {
+    background-image: -gtk-win32-theme-part(menu, 14 2);
+}
+
+.menuitem:prelight:insensitive {
+    background-image: -gtk-win32-theme-part(menu, 14 4);
+}
+
+.menuitem.radio,
+.menuitem.radio:prelight,
+.menuitem.radio:insensitive {
+    background-color: transparent;
+    background-image: none;
+    border-width: 0;
+}
+
+.menuitem.radio:active, 
+.menuitem.radio:active:prelight {
+    background-image: -gtk-win32-theme-part(menu, 11 3);
+    border-width: 0;
+}
+
+.menuitem.radio:inconsistent,
+.menuitem.radio:inconsistent:insensitive,
+.menuitem.radio:inconsistent:prelight,
+.menuitem.radio:inconsistent:active,
+.menuitem.radio:inconsistent:active:prelight {
+    background-image: none; /* Fall back to default, this state is not in win32 */
+    border-width: 0;
+}
+
+.menuitem.radio:insensitive:active,
+.menuitem.radio:insensitive:active:prelight {
+    background-image: -gtk-win32-theme-part(menu, 11 4);
+    border-width: 0;
+}
+
+.menuitem.check,
+.menuitem.check:prelight,
+.menuitem.check:insensitive {
+    background-image: none;
+    border-width: 0;
+}
+
+.menuitem.check:active, 
+.menuitem.check:active:prelight {
+    background-image: -gtk-win32-theme-part(menu, 11 1);
+    border-width: 0;
+}
+
+.menuitem.check:inconsistent,
+.menuitem.check:inconsistent:insensitive,
+.menuitem.check:inconsistent:prelight,
+.menuitem.check:inconsistent:active,
+.menuitem.check:inconsistent:active:prelight {
+    background-image: none; /* Fall back to default, this state is not in win32 */
+    border-width: 0;
+}
+
+.menuitem.check:insensitive:active,
+.menuitem.check:insensitive:active:prelight{
+    background-image: -gtk-win32-theme-part(menu, 11 2);
+    border-width: 0;
+}
+
+/* Notebook */
+.notebook {
+    /* This prevents a thin half-transparent line between the pane and the tab */
+    background-color: -gtk-win32-color(tab, 5);
+
+    border-width: 1px 1px 1px 1px;
+    border-style: solid;
+    background-origin: padding-box;
+    background-clip: border-box;
+
+    /* W32 theme draws it with borders and all, cut them away */
+    background-image: -gtk-win32-theme-part(tab, 9 1, margins(-1 -3 -2 -1));
+
+    /* Grab the borders now and duplicate them across the perimeter */
+    border-image: -gtk-win32-theme-part(tab, 9 1, margins(0 -2 -1 0)) 1 1 1 1 repeat;
+    /* MSW7 themes draw tab overlaps differently. Net result is:
+       * inactive tab text never moves no matter which tabs get to be active
+       * active tab text moves only up
+       * active tab steals space from its neighbors (overlapping their borders without moving them)
+       * inactive tab does not steal any space from its neighbors (prelight makes that obvious - one tab's borders light up, its neighbors' don't change)
+       * first(last in RTL?) tab has extra gap that disappears (due to overlapping) when this tab activates
+       This can't be emulated in GTK, so we won't even try.
+    */
+    -GtkNotebook-tab-overlap: 0;
+    -GtkNotebook-tab-curvature: 0;
+}
+
+.notebook tab {
+    /* Make sure parts not covered by the background are transparent */
+    background-color: transparent;
+
+    /* Use GTK border, since we can control where it's drawn (unlike built-in theme border, which is always left-top-right) */
+    border-width: 1px;
+    border-style: solid;
+    border-color: rgb(137, 140, 149);
+
+    /* Sadly, GTK CSS can't rotate images, which means that we can't use tabs from the theme */
+    background-image: none;
+    /* Don't use border image either, since it has no bottom border */
+    border-image: none;
+
+    /* By default tabs are large enough for their labels, give them more space */
+    padding: 2px;
+}
+
+/* W32 has no concept of notebook header (the rectangle where tabs are - including the area where tabs could be, if you add more of them), make it disappear */
+.notebook.header {
+  background-color: transparent;
+  background-image: none;
+  border-width: 0px;
+  border-color: transparent;
+}
+
+/* Draw everything ourselves. Default MSW7 theme for a top tab (the only kind of tab available) is:
+ 1-px grey border
+ extra 1-px inside white borders to the left and the right
+ top 8 pixels of the tab are light grey gradient (from 95% to 92% here)
+ rest of the tab is dark grey gradient (quick 3-pixel fall from 87% to 85%, then uniform until half the way, then drops to 84%, last 4 pixels fall down to 81%)
+
+ Prelight tab is the same as normal, but with light blue instead of grey.
+ Active tabs (prelight ot not) are simple white.
+ Disabled tabs are simple dark grey.
+ There's also theme part for "focused" tab (simple pale blue), but it is unclear in which circumstances it's used.
+
+ Normal and selected tab borders are grey.
+ Prelight tab borders are blue.
+ Disabled tab borders are darker grey.
+ */
+.notebook tab.top {
+    background-image: -gtk-gradient (linear,
+               0 0, 0 1,
+               color-stop(0, rgb(242, 242, 242)),
+               color-stop(0.2, rgb(235, 235, 235)),
+               color-stop(0.21, rgb(221, 221, 221)),
+               color-stop(0.22, rgb(216, 216, 216)),
+               color-stop(0.6, rgb(214, 214, 214)),
+               color-stop(0.9, rgb(214, 214, 214)),
+               color-stop(1, rgb(207, 207, 207)));
+    box-shadow: inset -1px 0px 0px white, inset 1px 0px 0px white;
+    /* Tab border is 1px (see above), override bottom border (for top tabs) to be 0px */
+    border-bottom: 0px;
+}
+
+.notebook tab.top:prelight {
+    background-image: -gtk-gradient (linear,
+               0 0, 0 1,
+               color-stop(0, rgb(234, 246, 253)),
+               color-stop(0.2, rgb(217, 240, 252)),
+               color-stop(0.21, rgb(190, 230, 253)),
+               color-stop(0.22, rgb(181, 226, 250)),
+               color-stop(0.6, rgb(178, 224, 249)),
+               color-stop(0.9, rgb(175, 222, 248)),
+               color-stop(1, rgb(167, 217, 245)));
+}
+
+.notebook tab.left {
+    background-image: -gtk-gradient (linear,
+               0 0, 1 0,
+               color-stop(0, rgb(242, 242, 242)),
+               color-stop(0.2, rgb(235, 235, 235)),
+               color-stop(0.21, rgb(221, 221, 221)),
+               color-stop(0.22, rgb(216, 216, 216)),
+               color-stop(0.6, rgb(214, 214, 214)),
+               color-stop(0.9, rgb(214, 214, 214)),
+               color-stop(1, rgb(207, 207, 207)));
+
+    box-shadow: inset 0px -1px 0px white, inset 0px 1px 0px white;
+    /* Tab border is 1px (see above), override right border (for left tabs) to be 0px */
+    border-right: 0px;
+}
+
+.notebook tab.left:prelight {
+    background-image: -gtk-gradient (linear,
+               0 0, 1 0,
+               color-stop(0, rgb(234, 246, 253)),
+               color-stop(0.2, rgb(217, 240, 252)),
+               color-stop(0.21, rgb(190, 230, 253)),
+               color-stop(0.22, rgb(181, 226, 250)),
+               color-stop(0.6, rgb(178, 224, 249)),
+               color-stop(0.9, rgb(175, 222, 248)),
+               color-stop(1, rgb(167, 217, 245)));
+}
+
+.notebook tab.right {
+    background-image: -gtk-gradient (linear,
+               1 0, 0 0,
+               color-stop(0, rgb(242, 242, 242)),
+               color-stop(0.2, rgb(235, 235, 235)),
+               color-stop(0.21, rgb(221, 221, 221)),
+               color-stop(0.22, rgb(216, 216, 216)),
+               color-stop(0.6, rgb(214, 214, 214)),
+               color-stop(0.9, rgb(214, 214, 214)),
+               color-stop(1, rgb(207, 207, 207)));
+
+    box-shadow: inset 0px 1px 0px white, inset 0px -1px 0px white;
+    /* Tab border is 1px (see above), override left border (for right tabs) to be 0px */
+    border-left: 0px;
+}
+
+.notebook tab.right:prelight {
+    background-image: -gtk-gradient (linear,
+               1 0, 0 0,
+               color-stop(0, rgb(234, 246, 253)),
+               color-stop(0.2, rgb(217, 240, 252)),
+               color-stop(0.21, rgb(190, 230, 253)),
+               color-stop(0.22, rgb(181, 226, 250)),
+               color-stop(0.6, rgb(178, 224, 249)),
+               color-stop(0.9, rgb(175, 222, 248)),
+               color-stop(1, rgb(167, 217, 245)));
+}
+
+.notebook tab.bottom {
+    background-image: -gtk-gradient (linear,
+               0 1, 0 0,
+               color-stop(0, rgb(242, 242, 242)),
+               color-stop(0.2, rgb(235, 235, 235)),
+               color-stop(0.21, rgb(221, 221, 221)),
+               color-stop(0.22, rgb(216, 216, 216)),
+               color-stop(0.6, rgb(214, 214, 214)),
+               color-stop(0.9, rgb(214, 214, 214)),
+               color-stop(1, rgb(207, 207, 207)));
+    box-shadow: inset -1px 0px 0px white, inset 1px 0px 0px white;
+    /* Tab border is 1px (see above), override top border (for bottom tabs) to be 0px */
+    border-top: 0px;
+}
+
+.notebook tab.bottom:prelight {
+    background-image: -gtk-gradient (linear,
+               0 1, 0 0,
+               color-stop(0, rgb(234, 246, 253)),
+               color-stop(0.2, rgb(217, 240, 252)),
+               color-stop(0.21, rgb(190, 230, 253)),
+               color-stop(0.22, rgb(181, 226, 250)),
+               color-stop(0.6, rgb(178, 224, 249)),
+               color-stop(0.9, rgb(175, 222, 248)),
+               color-stop(1, rgb(167, 217, 245)));
+}
+
+.notebook tab:active,
+.notebook tab:active:prelight,
+.notebook tab.right:active,
+.notebook tab.right:active:prelight,
+.notebook tab.bottom:active,
+.notebook tab.bottom:active:prelight,
+.notebook tab.left:active,
+.notebook tab.left:active:prelight
+{
+    /* active tabs are pure white with grey borders, and prelight changes nothing */
+    background-image: none;
+    background-color: white;
+    border-color: rgb(137, 140, 149);
+}
+
+.notebook tab:insensitive,
+.notebook tab:insensitive,
+.notebook tab.right:insensitive,
+.notebook tab.bottom:insensitive,
+.notebook tab.left:insensitive
+{
+    /* insensitive tabs are dark grey white with even darker grey borders */
+    background-image: none;
+    background-color: rgb(201, 202, 203);
+    border-color: rgb(128, 128, 128);
+}
+
+.notebook tab:prelight,
+.notebook tab.right:prelight,
+.notebook tab.bottom:prelight,
+.notebook tab.left:prelight
+{
+    /* prelight tabs have blue borders */
+    border-color: rgb(60, 127, 177);
+}
+
+
+.notebook tab.top:active {
+    /* Make active tab "stick out" up by padding it more at the bottom */
+    padding-bottom: 4px;
+}
+
+.notebook tab.right:active {
+    /* Make active tab "stick out" right by padding it more at the left */
+    padding-left: 4px;
+}
+
+.notebook tab.bottom:active {
+    /* Make active tab "stick out" down by padding it more at the top */
+    padding-top: 4px;
+}
+
+.notebook tab.left:active {
+    /* Make active tab "stick out" left by padding it more at the right */
+    padding-right: 4px;
+}
+
+
+/* Listbox */
+
+/* We're cheating here, using part 6 (listview header group),
+   because part 1 (listview item) is empty for some reason */
+.list-row:prelight {
+  background-image: -gtk-win32-theme-part(listview, 6 10);
+}
+
+.list-row:selected {
+  background-color: transparent;
+  /* Override *:selected {} blanket style, keeping the background - bright
+     and the text - dark */
+  color: @text_color;
+  background-image: -gtk-win32-theme-part(listview, 6 13);
+}
+
+.list-row:selected:focus {
+  background-image: -gtk-win32-theme-part(listview, 6 11);
+}
+
+.list-row:selected:prelight {
+  background-image: -gtk-win32-theme-part(listview, 6 12);
+}